#ifndef GRASP_H
#define GRASP_H

   #include <iostream>
   #include <fstream>
   #include <string>
   #include <list>
   #include <cstdlib> 
   #include <ctime>
   #include "rectangulo.h"
   #include "heuristica.h"
   #define alfa 0.5
   
      using namespace std;
       class Grasp : public Heuristica{
	 protected: 
	   int k;
	 public:
	         /**
         * Constructor por defecto. 
         * En principio no se usa.
         * */
         Grasp();

         /** Constructor
         * @param listado de los rectángulos a empaquetar
         * */
         Grasp(list<Rectangulo> lista_in);

         /** 
         * Generar solución inicial 
         * Mecanismo de generación de soluciones iniciales
         * • Soluciones generadas aleatoriamente
         * • GRASP
         * • Soluciones distantes de los óptimos locales previamente encontrados
         * */
         list<Rectangulo> generaInicial();


         /** 
         * Modificar la solución 
         * 
         * • Búsqueda local
         * • Estructura de entorno
         * • Muestreo en el entorno
         * */
          list<Rectangulo> mejoraSolucion(); //TODO Fernando: lo modifiqué pq daba error al compilar al ser la clase padre virtual
	 
	 void Cardinalidad(int momento);
          void Rango(int momento);
	 void Interseccion(int momento);
	 
	 ~Grasp(){}
       };
   #endif
